function sayhao(msg:string){
   return 'hello '+msg;
}
console.log(sayhao('乔碧落殿下'))
let arr = [1,2,3,4];
//直接报错 console.log(sayhao(arr));
//js 基础数据类型 boolean null undefined Number String symbol;
//boolean
let isboolean: boolean = true;
let nboolean: object = new Boolean(1); // 注意new返回的是对象;
let sboolean: boolean = Boolean(2); // 返回的是boolean值;
//number
let dnum: number = 1;
//string
let username: string = "章三";
let userage: number = 25;
let iname: string = `我的名字是${username},今年我${userage++}岁了`;
console.log(iname);
//Null undefined;
let u: undefined = undefined;
let n: null = null;
//undefined 类型的变量只能被赋值为 undefined，null 类型的变量只能被赋值为 null
//与 void 的区别是，undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量，可以赋值给 number 类型的变量：
dnum = u;
console.log(dnum);
//空值
//JavaScript 没有空值（Void）的概念，在 TypeScript 中，可以用 void 表示没有任何返回值的函数：
// function alertName(): void{
//      alert("你好")
// }
//声明一个 void 类型的变量没有什么用，因为你只能将它赋值为 undefined 和 null：
let uservoid: void = undefined;


//任意值
let myfavoitenum: string = 'seven'; // 声明类型
//myfavoitenum = 7;报错
let mysecendnum: any = 'six';
mysecendnum = 6;
//未声明类型的变量
let firstTs;
firstTs = 7;
firstTs = 'seven';

//类型推论
//以下代码虽然没有指定类型，但是会在编译的时候报错：
let nonetype = 'nonetype';
//nonetype = 1; 报错
//如果定义的时候没有赋值，不管之后有没有赋值，都会被推断成 any 类型而完全不被类型检查：
let hastype;
hastype = 1;
hastype = "你好";


//联合类型
let dobuletype: string | number = 7;
dobuletype = "我是字符串了" 
//联合类型使用 | 分隔每个类型。

